
Screenshot: Building Blocks Galore!
文件:
•. t6.rb
这个示例,演示的是,如何将两个部件封装成一个新的组件,以及,同时使用狠多个部件是如何的容易。现在,我们第一次使用一个自定义部件作为子代部件。
require 'Qt4'
class LCDRange < Qt::Widget
def initialize(parent = nil)
super()
lcd = Qt::LCDNumber.new(2)
slider = Qt::Slider.new(Qt::Horizontal)
slider.setRange(0, 99)
slider.setValue(0)
connect(slider, SIGNAL('valueChanged(int)'), lcd, SLOT('display(int)'))
layout = Qt::VBoxLayout.new()
layout.addWidget(lcd)
layout.addWidget(slider)
setLayout(layout)
end
end
class MyWidget < Qt::Widget
def initialize(parent = nil)
super()
quit = Qt::PushButton.new(tr('Quit'))
quit.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold))
connect(quit, SIGNAL('clicked()'), $qApp, SLOT('quit()'))
grid = Qt::GridLayout.new()
for row in 0..2
for column in 0..2
grid.addWidget(LCDRange.new(), row, column)
end
end
layout = Qt::VBoxLayout.new()
layout.addWidget(quit)
layout.addLayout(grid)
setLayout(layout)
end
end
app = Qt::Application.new(ARGV)
widget = MyWidget.new()
widget.show()
app.exec()
class LCDRange < Qt::Widget
LCDRange部件是一个不带任何编程接口的部件。它只拥有一个构造函数。这种部件并没有多大用处,所以我们日后将给它加入一些接口。
def initialize(parent = nil)
super()
lcd = Qt::LCDNumber.new(2)
slider = Qt::Slider.new(Qt::Horizontal)
slider.setRange(0, 99)
slider.setValue(0)
connect(slider, SIGNAL('valueChanged(int)'), lcd, SLOT('display(int)'))
layout = Qt::VBoxLayout.new()
layout.addWidget(lcd)
layout.addWidget(slider)
setLayout(layout)
end
这段代码是直接从第5章的 MyWidget 构造函数中山寨过来的。唯一的不同就是, Quit这个按钮没有被包含进来,并且这个类已经重命名了。
class MyWidget < Qt::Widget
MyWidget,同样地,不包含编程接口,只有一个构造函数。
def initialize(parent = nil)
super()
quit = Qt::PushButton.new(tr('Quit'))
quit.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold))
connect(quit, SIGNAL('clicked()'), $qApp, SLOT('quit()'))
在 LCDRange 的前身类中所包含的那个按钮现在已经单独拿出来了,这样我们就可以放置一个Quit按钮和狠多个LCDRange对象。
grid = Qt::GridLayout.new()
我们创建一个Qt::Widget,其中有一个Qt::GridLayout,它包含了三列内容。Qt::GridLayout会自动在行和列中放置它的各个部件;当妳向布局中加入部件时,可以指定行号和列号,Qt::GridLayout会在网格中自动放置它们。
for row in 0..2
for column in 0..2
grid.addWidget(LCDRange.new(), row, column)
end
end
我们创建了9个 LCDRange部件,它们都是网格对象的子代部件,然后将它们放置在3行和3列中。
这个程序演示的是同时使用狠多个部件是如何的容易。其中的每一个的行为都像前一章中的滑动器和液晶显示器数字部件一样。再次说明,不同之处就在于它们的实现代码。
在启动时,给每个滑动器设置一个不同值/随机值。
未知美人
未知美人
HxLauncher: Launch Android applications by voice commands